﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Negocio.Generico;
using System.IO;
using Negocio.Osd;
using System.Diagnostics;

namespace PresentacionWeb.control
{
    public partial class DatosPersona : UserControl
    {

        #region Constantes

        /// <summary>
        /// Ruta de una imagen
        /// </summary>
        private const string RUTAIMAGEN = "~/imagenes/imgValidacion/";

        /// <summary>
        /// Nombre del script que vamos a cargar
        /// </summary>
        private const string SCRIPT = "FuncionesGenerales";

        #endregion

        #region Propiedades

        /// <summary>
        /// Obtiene la ruta del script
        /// </summary>
        private string RutaScript
        {
            get
            {
                return this.ResolveUrl("~/js/FuncionesGenerales.js");
            }
        }


        private string nick
        {
            set { ViewState["nick"] = value; }
            get { return ViewState["nick"].ToString(); }
        }


        private PersonaDTO tokenUsuario;

        public PersonaDTO TokenUsuario
        {
            get { return tokenUsuario; }
            set { tokenUsuario = value; }
        }



        public string imagenUsuario
        {
            set { imgImagen.ImageUrl = value; }
        }





        #endregion

        #region Eventos de pagina

        protected void Page_Load(object sender, EventArgs e)
        {
            Random r = new Random();
            int aleatorio = r.Next(0, 9);

            imgImagen.ImageUrl = String.Concat("~/imagenes/imgValidacion/", aleatorio.ToString(), ".gif");
            imgPersonal.ImageUrl = "~/imagenes/imgUsuarios/jhon.jpeg";
            TokenUsuario = (PersonaDTO)Session["tokenUsuario"];
            if (Session["EdicionPerfil"]!=null &&(bool)Session["EdicionPerfil"] == true && TokenUsuario != null)
            {
                //Estamos en el modo edicion
                CargaDatosUsuario();
            }

        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            //TODO: todo este puto codigo por si algun dia quiero hacer la recarga dinamica
            //Random r = new Random();

            //try
            //{
            //    imgbtnRecarga.Attributes["onClick"] =
            //    String.Format("javascript:recargaValidacion({0});return false;", imgImagen.ClientID);
            //    hdfImagenBot.Value = r.Next(1, 3).ToString();
            //    imgImagen.ImageUrl = String.Concat(RUTAIMAGEN, hdfImagenBot.Value, ".png");
            //}
            //catch (Exception ex)
            //{
            //    throw new Exception(ex.ToString());
            //}
        }

        #endregion

        #region Metodos publicos

        /// <summary>
        /// Obtiene todos los datos de la persona y los encapsula en un bean
        /// </summary>
        /// <returns>PersonaDTO que contiene todos los datos rellenados por el usuario</returns>
        public PersonaDTO getPersona()
        {
            PersonaDTO persona = new PersonaDTO();
            if (Page.IsValid)
            {
                persona.Nick = txtNick.Text;
                persona.Aficiones = txtAficiones.Text;
                persona.Frase = txtFrase.Text;
                persona.UltimaConexion = DateTime.Now;

                persona.Nombre = txtNombre.Text;
                persona.Apellido1 = txtApellido1.Text;
                persona.Apellido2 = txtApellido2.Text;
                persona.Email = txtEmail.Text;
                persona.Dni = txtDNI.Text;
                persona.FechaNacimiento = DateTime.Parse(txtFechaNacimiento.Text);


            }
            return persona;
        }

        #endregion

        #region Metodos privados

        private void CargaDatosUsuario()
        {
            try
            {
                //Datos propios
                txtNombre.Text = tokenUsuario.Nombre;
                txtApellido1.Text=tokenUsuario.Apellido1;
                txtApellido2.Text=tokenUsuario.Apellido2;
                txtEmail.Text=tokenUsuario.Email;
                txtFechaNacimiento.Text = tokenUsuario.FechaNacimiento.ToString();
                txtDNI.Text = tokenUsuario.Dni;

                //Datos redundantes
                txtNick.Text = tokenUsuario.Nick;
                txtAficiones.Text = tokenUsuario.Aficiones;
                txtFrase.Text = tokenUsuario.Frase;
                txtDescripcion.Text = tokenUsuario.Propio;
                //if (tokenUsuario.Imagen != null) 
                //{

                //    string fichero = AppDomain.CurrentDomain.BaseDirectory + tokenUsuario.NombreImagen;

                //    using (System.IO.Stream s = System.IO.File.Create(fichero))
                //    {
                //        s.Write(tokenUsuario.Imagen, 0, tokenUsuario.Imagen.Length);
                      
                //    }
                //    imgPersonal.ImageUrl = fichero;
                //}
            }
            catch (Exception ex)
            {
                Response.Write("<script>alert('El usuario no ha sido validado. Excepcion "+ex.Message+"'):</script>");
            }
        }

        private void CargaImagen()
        {

        }

        #endregion

        #region Eventos

        /// <summary>
        /// Evento de validacion del nombre(Consulta de base de datos Asincrona)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNick_Click(object sender, EventArgs e)
        {
            osdSeguridad seg = null;
            seg = osdSeguridad.GetInstance();

            nick = txtNick.Text;
            if (txtNick.Text.Equals(String.Empty))
            {
                throw new Exception();
            }
            if (seg.CompruebaNick(nick))
            {
                lblValidaNick.Visible = true;
                lblValidaNick.Text = "Hay un usuario con ese nombre";
                lblValidaNick.CssClass = "errorLabel";
            }
            else
            {
                lblValidaNick.Visible = true;
                lblValidaNick.Text = "Nick Valido";
                lblValidaNick.CssClass = "okLabel";
            }

            //upValidacion.Update();
        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            Random r = new Random();
            int aleatorio = r.Next(0, 9);

            imgImagen.ImageUrl = String.Concat("~/imagenes/imgValidacion/", aleatorio.ToString(), ".gif");
        }

        //protected void imgbtnRecarga_Click(object sender, ImageClickEventArgs e)
        //{
        //    Random r = new Random();
        //    int aleatorio = r.Next(0, 9);

        //    imgImagen.ImageUrl = String.Concat("~/imagenes/imgValidacion/", aleatorio.ToString(), ".gif");
        //}


        #endregion


    }
}